package smartlifev30.com.sdk.net.core;

import android.support.annotation.NonNull;

import java.io.IOException;

/**
 * @param <Request>  发送的数据对象
 * @param <Response> 接收的数据对象
 * @author tys
 */
public interface IClient<Request, Response> {


    /**
     * 建立连接
     * @param host
     * @param port
     * @param listen
     * @throws IOException
     */
    void connect(@NonNull String host, @NonNull Integer port, ConnectListen listen) throws IOException;

    /**
     * 断开连接(伴随线程的回收)
     *
     * @throws IOException
     */
    void disConnect() throws IOException;

    /**
     * 发送消息
     *
     * @param request
     * @throws IOException
     */
    void send(Request request) throws IOException;

    /**
     * 接收消息
     *
     * @param response
     * @throws IOException
     */
    void receive(Response response) throws IOException;

    /**
     * 连接状态
     *
     * @return
     */
    ConnectStatus getConnectStatus();


    interface ConnectListen {
        /**
         * 连接成功
         */
        void onSuccess();

        /**
         * 连接失败
         *
         * @param e
         */
        void onFailed(Throwable e);
    }

}


